package com.opencore.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;

import com.opencore.dto.DteLecturaDTO;
import com.opencore.util.ConexionSQL;

public class DteLecturaDao {
	private static PreparedStatement ps = null;
	private static ResultSet rs = null;
	private static Connection con = null;

	public static ArrayList<DteLecturaDTO> getAll() throws SQLException, ClassNotFoundException{
		con = ConexionSQL.crearConeccionSQL();
		ArrayList<DteLecturaDTO>  archivos = new ArrayList<DteLecturaDTO>();
		try {
			ps = con.prepareStatement("Select ID_DTE_LECTURA, NOMBRE_ARCHIVO, DIRECTORIO, ARCHIVO, FECHA_LECTURA, INDICADOR_LECTURA FROM DTE_LECTURA");
			rs = ps.executeQuery();

			while(rs.next()) {
				DteLecturaDTO linea = new DteLecturaDTO();
				linea.setIdDteLectura(rs.getInt("ID_DTE_LECTURA"));
				linea.setNombreArchivo(rs.getString("NOMBRE_ARCHIVO"));
				linea.setDirectorio(rs.getString("DIRECTORIO"));
				linea.setArchivo(rs.getString("ARCHIVO"));
				linea.setFechaLectura(rs.getString("FECHA_LECTURA"));
				linea.setIndicadorLectura(rs.getString("INDICADOR_LECTURA"));
				archivos.add(linea);
			}			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null)
				rs.close();
			if(ps != null)
				ps.close();
			ConexionSQL.cierraConeccion();
		}
		return archivos;
	}

	public static DteLecturaDTO getAllById(int idLectura) throws SQLException, ClassNotFoundException{
		con = ConexionSQL.crearConeccionSQL();
		DteLecturaDTO  linea = new DteLecturaDTO();
		try {
			ps = con.prepareStatement("Select ID_DTE_LECTURA, NOMBRE_ARCHIVO, DIRECTORIO, ARCHIVO, FECHA_LECTURA, INDICADOR_LECTURA FROM DTE_LECTURA where id_dte_lectura ="+idLectura);
			rs = ps.executeQuery();
			while(rs.next()) {
				linea.setIdDteLectura(rs.getInt("ID_DTE_LECTURA"));
				linea.setNombreArchivo(rs.getString("NOMBRE_ARCHIVO"));
				linea.setDirectorio(rs.getString("DIRECTORIO"));
				linea.setArchivo(rs.getString("ARCHIVO"));
				linea.setFechaLectura(rs.getString("FECHA_LECTURA"));	
				linea.setIndicadorLectura(rs.getString("INDICADOR_LECTURA"));
			}			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null)
				rs.close();
			if(ps != null)
				ps.close();
			ConexionSQL.cierraConeccion();
		}
		return linea;
	}

	public static boolean insert(ArrayList<DteLecturaDTO> archivo) throws Exception{
		boolean exito = false;
		try {
			con = ConexionSQL.crearConeccionSQL();
			int correlativo = ConexionSQL.getLastRow("ID_DTE_LECTURA", "DTE_LECTURA");

			StringBuilder insert = new StringBuilder();
			insert.append("insert into DTE_LECTURA (ID_DTE_LECTURA, NOMBRE_ARCHIVO, DIRECTORIO, ARCHIVO, FECHA_LECTURA, INDICADOR_LECTURA) values (?,?,?,?,?,?)");			
			ps = con.prepareStatement(insert.toString());
			for (int i = 0; i < archivo.size(); i++) {
				ps.setInt(1, correlativo);
				ps.setString(2, archivo.get(i).getNombreArchivo());
				ps.setString(3, archivo.get(i).getDirectorio());
				ps.setString(4, archivo.get(i).getArchivo());
				ps.setTimestamp(5, new Timestamp(System.currentTimeMillis()));
				ps.setInt(6,0);
				ps.addBatch();
				correlativo++;
			}
			ps.executeBatch();
			ps.clearBatch();
			exito = true;
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null)
				rs.close();
			if(ps != null)
				ps.close();
			ConexionSQL.cierraConeccion();
		}
		return exito;
	}

	public static boolean update(DteLecturaDTO archivo) throws Exception{
		boolean exito = false;
		try {
			con = ConexionSQL.crearConeccionSQL();
			StringBuilder update = new StringBuilder();
			update.append("update DTE_LECTURA set NOMBRE_ARCHIVO = ?, DIRECTORIO = ?, ARCHIVO = ?, FECHA_LECTURA = ?, INDICADOR_LECTURA = ? where ID_DTE_LECTURA="+archivo.getIdDteLectura());
			ps = con.prepareStatement(update.toString());
			ps.setString(1, archivo.getNombreArchivo());
			ps.setString(2, archivo.getDirectorio());
			ps.setString(3, archivo.getArchivo());
			ps.setTimestamp(4, new Timestamp(System.currentTimeMillis()));
			ps.setString(5, archivo.getIndicadorLectura());
			ps.executeUpdate();

			exito = true;
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null)
				rs.close();
			if(ps != null)
				ps.close();
			ConexionSQL.cierraConeccion();
		}
		return exito;
	}

	//main para pruebas unitarias
	//		public static void main(String[] args) throws Exception {
	//	
	//			try {
	//				//get all
	//				List<DteLecturaDTO> dteLectura = getAll();
	//				for (DteLecturaDTO dteLect : dteLectura) {
	//					System.out.println(dteLect.toString());
	//				}
	//
	//			//get all by id
	//			DteLecturaDTO dteLectura2 = getAllById(1);
	//			System.out.println(dteLectura2.toString());
	//
	//			//insert
	//			ArrayList<DteLecturaDTO> archivo = new ArrayList<DteLecturaDTO>();
	//			DteLecturaDTO linea = new DteLecturaDTO();
	//			linea.setNombreArchivo("prueba");
	//			linea.setDirectorio("C:/hola/soy/un/directorio");
	//			linea.setArchivo("soy un texto de dte");
	//			archivo.add(linea);
	//			System.out.println(insert(archivo));
	//
	//			//update
	//			DteLecturaDTO linea2 = new DteLecturaDTO();
	//			linea2.setIdDteLectura(1);
	//			linea2.setNombreArchivo("prueba");
	//			linea2.setDirectorio("C:/hola/soy/un/directorio");
	//			linea2.setArchivo("soy un texto de dte mas largo");
	//			System.out.println(update(linea2));
	//
	//			} catch (ClassNotFoundException e) {
	//				e.printStackTrace();
	//			} catch (SQLException e) {
	//				e.printStackTrace();
	//			}
	//		}
}
